﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ENLibraryClass;

namespace uacars
{
    public partial class frmPedidos : Form
    {
        private DataTable dtEncurso;
        private DataTable dtFinalizado;
        private DataTable dtTodos;

        float precio = 0.0F;
        float preciofinal = 0.0F;

        //FUNCIONES

        public bool ValidarCampos()
        {
            epError.Clear();

            bool vehiculo = true, cliente = true, empleado = true, tipotransaccion = true, formadepago = true, fecharealizado = true;

            bool resultado = false;


            if (string.IsNullOrEmpty(tbxVehiculo.Text) || Validacion.Valida(tbxVehiculo.Text, Validacion.patronNumero) == false)
            {
                vehiculo = false;
                epError.SetError(tbxVehiculo, "Debe introducir un codigo valido");
            }

            if (string.IsNullOrEmpty(tbxCliente.Text) || Validacion.Valida(tbxCliente.Text, Validacion.patronNumero) == false)
            {
                cliente = false;
                epError.SetError(tbxCliente, "Debe introducir un codigo valido");
            }

            if (string.IsNullOrEmpty(tbxEmpleado.Text) || Validacion.Valida(tbxEmpleado.Text, Validacion.patronNumero) == false)
            {
                empleado = false;
                epError.SetError(tbxEmpleado, "Debe introducir un codigo valido");
            }



            if (string.IsNullOrEmpty(cbTipoDeTransaccion.Text))
            {
                tipotransaccion = false;
                epError.SetError(cbTipoDeTransaccion, "Debe seleccionar un tipo de transaccion");
            }

            if (string.IsNullOrEmpty(cbFormaDePago.Text))
            {
                formadepago = false;
                epError.SetError(cbFormaDePago, "Debe seleccionar un tipo de forma de pago");
            }

            

            if (dtpFechaRealizacion.Checked == false)
            {
                fecharealizado = false;
                epError.SetError(dtpFechaRealizacion, "Debe introducir una fecha");
            }

            
            if (vehiculo == true && cliente == true && empleado == true && tipotransaccion == true && formadepago == true && fecharealizado == true)
                resultado = true;

            return resultado;
        }



        public void LimpiarCampos()
        {
            lbIdPedido.Text = " ";
            tbxVehiculo.Text = "";
            tbxEmpleado.Text = "";
            tbxPrecio.Text = "";
            tbxPrecioFinal.Text = "";
            tbxCliente.Text = "";
            tbxChofer.Text = "";
            cbEstadoPedido.Text = "";
            cbFormaDePago.Text = "";
            tbFacturado.Text = "";
            cbTipoDeTransaccion.Text = "";
            dtpFechaRealizacion.Value = DateTime.Now;
            dtpFechaRealizacion.Checked = false;

            for (int i = 0; i < clbOpcionesPedido.Items.Count; i++)
                clbOpcionesPedido.SetItemChecked(i, false);
            
            cbFormaDePago.SelectedIndex = 0;
            cbTipoDeTransaccion.SelectedIndex = 0;

            tbxChofer.Enabled = false;
            tbxCliente.ReadOnly = true;
            tbxEmpleado.ReadOnly = true;
            tbxVehiculo.ReadOnly = true;

            btnFinalizar.Enabled = false;

            tbxVehiculo.ReadOnly = false;
            cbFormaDePago.Enabled = true;
            cbTipoDeTransaccion.Enabled = true;
            dtpFechaRealizacion.Enabled = true;
            
            clbOpcionesPedido.Enabled = true;
            btnBuscarCliente.Enabled = true;
            btnBuscarEmpleado.Enabled = true;
            
            btnModificar.Enabled = true;
            btFactura.Enabled = false;
            btVerFactura.Enabled = false;
            btnModificar.Enabled = false;
            btnAlta.Enabled = true;

            
        }


        public void ReCalcular()
        {


            try
            {
                ENPedidos preV = new ENPedidos();

                precio = preV.RecuperarPrecio(int.Parse(tbxVehiculo.Text), cbTipoDeTransaccion.Text);

                foreach (string nomOp in clbOpcionesPedido.CheckedItems)
                {
                    ENOpcionesPedido op = new ENOpcionesPedido(nomOp, 0);
                    precio += op.RecuperarPrecio();
                }

                tbxPrecio.Text = precio.ToString();

                preciofinal = precio * 1.16F;

                tbxPrecioFinal.Text = preciofinal.ToString();
                tssl1.Text = "Factura Recalculada";

            }
            catch
            {
                MessageBox.Show("Error al Recalcular Factura");
                tssl1.Text = "Error al Recalcular Factura";
            }
            
        
        }

        //CODIGO PRINCIPAL

        public frmPedidos()
        {
            InitializeComponent();
           
        }


        private void frmPedidos_Load(object sender, EventArgs e)
        {

            dtpFechaFinalizacion.Enabled = false;
            

            btnBuscarChofer.Enabled = false;
            tbxChofer.Enabled = false;


            tbxPrecio.Text = "";
            tbxPrecioFinal.Text = "";


            ENPedidos pedidos = new ENPedidos();
            DataTable dtPedidos = pedidos.BuscarPedidos(ref dtTodos, ref dtEncurso, ref dtFinalizado);
            dgvPedidos.DataSource = dtPedidos;

            ENFormaDePago fdp = new ENFormaDePago();
            DataTable tabla = fdp.BuscarFormaDePago();
            cbFormaDePago.Items.Add("");
            foreach (DataRow registro in tabla.Rows)
            {
                cbFormaDePago.Items.Add(registro["nombre"].ToString());
            }

            ENTipoDeTransaccion tdt = new ENTipoDeTransaccion();
            DataTable tabla2 = tdt.BuscarTipoDeTransaccion();
            cbTipoDeTransaccion.Items.Add("");
            foreach (DataRow registro in tabla2.Rows)
            {
                cbTipoDeTransaccion.Items.Add(registro["nombre"].ToString());
            }

            
            
            

            ENOpcionesPedido op = new ENOpcionesPedido();
            DataTable tabla4 = op.BuscarOpcionesPedido();
            foreach (DataRow registro in tabla4.Rows)
            {
                clbOpcionesPedido.Items.Add(registro["nombre"].ToString());
            }


            
            cbFormaDePago.SelectedIndex = 0;
            cbTipoDeTransaccion.SelectedIndex = 0;
            rbTodos.Checked = true;

            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;

            LimpiarCampos();

        }




        private void button1_Click(object sender, EventArgs e)
        {
            toolTipLimpiar.Active = true;
        }

       
        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            frmClientes cliente = new frmClientes("");
            cliente.ped = this;
            cliente.MdiParent = this.MdiParent;
            cliente.Show();
        }

        private void btnAlta_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {

                try
                {
                    string[] opciones = {"","","","","",""};

                    int i =0;
                    foreach (string opcion in clbOpcionesPedido.CheckedItems)
                    {
                        opciones[i] = opcion;
                        i++;
                    }
                    int chofe;
                    if (tbxChofer.Enabled == false)
                        chofe = 0;
                    else
                        chofe = int.Parse(tbxChofer.Text);


                    ENIdSiguiente idsiguiente = new ENIdSiguiente("pedidos",0);
                    int idPedido = idsiguiente.BuscarIdSiguiente();
                    ENPedidos nuevo = new ENPedidos(idPedido, int.Parse(tbxVehiculo.Text), int.Parse(tbxCliente.Text), int.Parse(tbxEmpleado.Text), chofe, cbTipoDeTransaccion.Text, cbFormaDePago.Text, float.Parse(tbxPrecio.Text), float.Parse(tbxPrecioFinal.Text), dtpFechaRealizacion.Value.Date, dtpFechaFinalizacion.Value.Date, "En curso", "No", opciones[0], opciones[1], opciones[2], opciones[3], opciones[4], opciones[5]);

                    nuevo.AltaPedido();
                    idsiguiente.ActualizarIdSiguiente();

                    dgvPedidos.DataSource = nuevo.BuscarPedidos(ref dtTodos, ref dtEncurso, ref dtFinalizado);
                    tssl1.Text = "Alta Realizada";

                    ficheros f = new ficheros();
                    f.EscribirLog(0, 3, idPedido.ToString());

                    LimpiarCampos();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al insertar Pedido. Este Pedido ya existe.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                }
                  
            
            
            }
        }

        

        private void clbOpciones_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (clbOpcionesPedido.CheckedItems.Contains("Chofer"))
            {
                btnBuscarChofer.Enabled = true;
                tbxChofer.Enabled = true;
            }
            else
            {
                btnBuscarChofer.Enabled = false;
                tbxChofer.Enabled = false;
            }

        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            

                try
                {
                    string[] opciones = { "", "", "", "", "", "" };

                    int i = 0;
                    foreach (string opcion in clbOpcionesPedido.CheckedItems)
                    {
                        opciones[i] = opcion;
                        i++;
                    }

                    int vehiculo, cliente, chofer, empleado;
                    DateTime fecharealizado, fechafinalizado;

                    if (tbxVehiculo.Text == "")
                        vehiculo = 0;
                    else
                        vehiculo = int.Parse(tbxVehiculo.Text);

                    if (tbxCliente.Text == "")
                        cliente = 0;
                    else
                        cliente = int.Parse(tbxCliente.Text);

                    if (tbxEmpleado.Text == "")
                        empleado = 0;
                    else
                        empleado = int.Parse(tbxEmpleado.Text);

                    if (tbxChofer.Text == "")
                        chofer = 0;
                    else
                        chofer = int.Parse(tbxChofer.Text);

                    if (dtpFechaRealizacion.Checked == false)
                        fecharealizado = DateTime.Parse("01/01/1900");
                    else
                        fecharealizado = dtpFechaRealizacion.Value.Date;

                    if (dtpFechaFinalizacion.Checked == false)
                        fechafinalizado = DateTime.Parse("01/01/1900");
                    else
                        fechafinalizado = dtpFechaFinalizacion.Value.Date;
                    
                    ENPedidos buscado = new ENPedidos(0,vehiculo, cliente, empleado, chofer, cbTipoDeTransaccion.Text, cbFormaDePago.Text, 0.0F, 0.0F, fecharealizado, fechafinalizado, cbEstadoPedido.Text, tbFacturado.Text, opciones[0], opciones[1], opciones[2], opciones[3], opciones[4], opciones[5]);

                    dgvPedidos.DataSource = buscado.BuscarPedidosPor(ref dtTodos, ref dtEncurso, ref dtFinalizado);
                    rbTodos.Checked = true;
                    tssl1.Text = "Búsqueda Realizada";
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al buscar Pedido. Este Pedido no existe.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                }

        }

        private void dgvPedidos_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            LimpiarCampos();
            dgvPedidos.CurrentRow.Selected = true;
            lbIdPedido.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["id"].Value.ToString();


            tbxCliente.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["cliente"].Value.ToString();
            tbxVehiculo.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["vehiculo"].Value.ToString();
            tbxEmpleado.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["empleado"].Value.ToString();
            tbxChofer.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["chofer"].Value.ToString();

            dtpFechaRealizacion.Value = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["fecharealizado"].Value.ToString()));
            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["fechafinalizado"].Value.ToString() != "")
                dtpFechaFinalizacion.Value = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["fechafinalizado"].Value.ToString()));

            cbEstadoPedido.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["estadopedido"].Value.ToString();
            cbFormaDePago.SelectedItem = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["formadepago"].Value.ToString();
            cbTipoDeTransaccion.SelectedItem = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["tipotransaccion"].Value.ToString();

            tbFacturado.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["facturado"].Value.ToString();

            tbxPrecio.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["precio"].Value.ToString();
            tbxPrecioFinal.Text = dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["preciofinal"].Value.ToString();


            ArrayList opciones = new ArrayList();


            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion1"].Value.ToString()!="")
                opciones.Add(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion1"].Value.ToString());
            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion2"].Value.ToString()!="")
                opciones.Add(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion2"].Value.ToString());
            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion3"].Value.ToString()!="")
                opciones.Add(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion3"].Value.ToString());
            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion4"].Value.ToString()!="")
                opciones.Add(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion4"].Value.ToString());
            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion5"].Value.ToString()!="")
                opciones.Add(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion5"].Value.ToString());
            if (dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion6"].Value.ToString()!="")
                opciones.Add(dgvPedidos.Rows[dgvPedidos.CurrentCell.RowIndex].Cells["opcion6"].Value.ToString());

            for(int i = 0; i<clbOpcionesPedido.Items.Count; i++)
                clbOpcionesPedido.SetItemChecked(i, false);

            if (opciones.Count != 0)
            {
                foreach (string registro in opciones)
                {
                    clbOpcionesPedido.SelectedItem = registro;
                    clbOpcionesPedido.SetItemChecked(clbOpcionesPedido.SelectedIndex, true);

                }
            }

            
            if (cbEstadoPedido.Text == "Finalizado" && tbFacturado.Text == "Si")
            {
                btnFinalizar.Enabled = false;                
                cbFormaDePago.Enabled = false;
                cbTipoDeTransaccion.Enabled = false;
                dtpFechaRealizacion.Enabled = false;
                clbOpcionesPedido.Enabled = false;
                btnBuscarCliente.Enabled = false;
                btnBuscarEmpleado.Enabled = false;
                
                btnModificar.Enabled = false;
                btFactura.Enabled = false;
                btVerFactura.Enabled = true;
                btnModificar.Enabled = false;
                btnBuscar.Enabled = false;
                btnCalcular.Enabled = false;
                btnAlta.Enabled = false;
            }
            else
                if(cbEstadoPedido.Text == "Finalizado")
                {
                btnFinalizar.Enabled = false;                
                cbFormaDePago.Enabled = false;
                cbTipoDeTransaccion.Enabled = false;
                dtpFechaRealizacion.Enabled = false;
                clbOpcionesPedido.Enabled = false;
                btnBuscarCliente.Enabled = false;
                btnBuscarEmpleado.Enabled = false;
                
                btnModificar.Enabled = false;
                btFactura.Enabled = true;
                btVerFactura.Enabled = false;
                btnModificar.Enabled = false;
                btnBuscar.Enabled = false;
                btnCalcular.Enabled = false;
                btnAlta.Enabled = false;
                
                }
                else
                    if (tbFacturado.Text == "Si")
                    {
                        btnFinalizar.Enabled = true;
                        cbFormaDePago.Enabled = false;
                        cbTipoDeTransaccion.Enabled = false;
                        dtpFechaRealizacion.Enabled = false;
                        clbOpcionesPedido.Enabled = false;
                        btnBuscarCliente.Enabled = false;
                        btnBuscarEmpleado.Enabled = false;
                        
                        btnModificar.Enabled = false;
                        btFactura.Enabled = false;
                        btVerFactura.Enabled = true;
                        btnModificar.Enabled = false;
                        btnBuscar.Enabled = false;
                        btnCalcular.Enabled = false;
                        btnAlta.Enabled = false;

                    }
                    else
                    {
                        btnFinalizar.Enabled = true;
                        cbFormaDePago.Enabled = true;
                        cbTipoDeTransaccion.Enabled = true;
                        dtpFechaRealizacion.Enabled = true;
                        clbOpcionesPedido.Enabled = true;
                        btnBuscarCliente.Enabled = true;
                        btnBuscarEmpleado.Enabled = true;
                        
                        btnModificar.Enabled = true;
                        btFactura.Enabled = true;
                        btVerFactura.Enabled = false;
                        btnModificar.Enabled = true;
                        btnBuscar.Enabled = false;
                        btnCalcular.Enabled = true;
                        btnAlta.Enabled = false;

                    }

        }

        private void btnBaja_Click(object sender, EventArgs e)
        {
            if(MessageBox.Show("¿Desea eliminar el Pedido seleccionado?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {

                try
                {

                    ENPedidos borrado = new ENPedidos(int.Parse(lbIdPedido.Text), 0, 0, 0, 0, null, null, 0.0F, 0.0F, DateTime.Parse("01/01/1900"), DateTime.Parse("01/01/1900"),null,null,null,null,null,null,null,null);

                    borrado.BorrarPedido();


                    dgvPedidos.DataSource = borrado.BuscarPedidos(ref dtTodos, ref dtEncurso, ref dtFinalizado);
                    tssl1.Text = "Baja Realizada";

                    ficheros f = new ficheros();
                    f.EscribirLog(1, 3, lbIdPedido.Text.ToString());

                    LimpiarCampos();

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al borrar Pedido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                }
            }
        }

        private void lbIdPedido_TextChanged(object sender, EventArgs e)
        {
            if (lbIdPedido.Text != "")
            {
                btnBaja.Enabled = true;
                btnModificar.Enabled = true;
            }

        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                if (tbFacturado.Text == "No")
                {
                    try
                    {
                        ReCalcular();
                        string[] opciones = { "", "", "", "", "", "" };

                        int i = 0;
                        foreach (string opcion in clbOpcionesPedido.CheckedItems)
                        {
                            opciones[i] = opcion;
                            i++;
                        }
                        int chofe;
                        if (tbxChofer.Enabled == false)
                            chofe = 0;
                        else
                            chofe = int.Parse(tbxChofer.Text);

                        ENPedidos actualizado = new ENPedidos(int.Parse(lbIdPedido.Text), int.Parse(tbxVehiculo.Text), int.Parse(tbxCliente.Text), int.Parse(tbxEmpleado.Text), chofe, cbTipoDeTransaccion.Text, cbFormaDePago.Text, float.Parse(tbxPrecio.Text), float.Parse(tbxPrecioFinal.Text), dtpFechaRealizacion.Value.Date, dtpFechaFinalizacion.Value.Date, cbEstadoPedido.Text, tbFacturado.Text, opciones[0], opciones[1], opciones[2], opciones[3], opciones[4], opciones[5]);

                        actualizado.ModificarPedido();



                        dgvPedidos.DataSource = actualizado.BuscarPedidos(ref dtTodos, ref dtEncurso, ref dtFinalizado);
                        tssl1.Text = "Modificación Realizada";

                        ficheros f = new ficheros();
                        f.EscribirLog(2, 3, tbxVehiculo.Text.ToString());

                        LimpiarCampos();

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error al modificar Pedido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                    }
                }
                else
                    MessageBox.Show("No puede modificar este pedido. Ya ha sido facturado.");

            }
        } 

        private void rbFinalizados_CheckedChanged(object sender, EventArgs e)
        {
            if (rbFinalizados.Checked == true)
                dgvPedidos.DataSource = dtFinalizado;
        }

        private void rbEnCurso_CheckedChanged(object sender, EventArgs e)
        {
            if (rbEnCurso.Checked == true)
                dgvPedidos.DataSource = dtEncurso;
        }

        private void btnBuscarEmpleado_Click(object sender, EventArgs e)
        {
            frmEmpleados empleado = new frmEmpleados("empleado");
            empleado.ped = this;
            empleado.MdiParent = this.MdiParent;
            empleado.Show();
        }

        private void btnBuscarChofer_Click(object sender, EventArgs e)
        {
            frmEmpleados empleado = new frmEmpleados("chofer");
            empleado.ped = this;
            empleado.MdiParent = this.MdiParent;
            empleado.Show();
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTodos.Checked == true)
                dgvPedidos.DataSource = dtTodos;
        }

        private void buttonLimpiar_Click(object sender, EventArgs e)
        {
            epError.Clear();
            LimpiarCampos();
        }

        private void btFactura_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea facturar el pedido?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                if (lbIdPedido.Text != " " && tbFacturado.Text == "No")
                {

                    ENPedidos factura = new ENPedidos(int.Parse(lbIdPedido.Text), 0, 0, 0, 0, null, null, 0.0F, 0.0F, DateTime.Parse("01/01/1900"), DateTime.Parse("01/01/1900"), null, null, null, null, null, null, null, null);
                    factura.EmisionFactura();
                    string[] opciones = { "", "", "", "", "", "" };

                    int i = 0;
                    foreach (string opcion in clbOpcionesPedido.CheckedItems)
                    {
                        opciones[i] = opcion;
                        i++;
                    }


                    ENPedidos actualizado = new ENPedidos(int.Parse(lbIdPedido.Text), int.Parse(tbxVehiculo.Text), int.Parse(tbxCliente.Text), int.Parse(tbxEmpleado.Text), int.Parse(tbxChofer.Text), cbTipoDeTransaccion.Text, cbFormaDePago.Text, float.Parse(tbxPrecio.Text), float.Parse(tbxPrecioFinal.Text), dtpFechaRealizacion.Value.Date, dtpFechaFinalizacion.Value.Date, cbEstadoPedido.Text, "Si", opciones[0], opciones[1], opciones[2], opciones[3], opciones[4], opciones[5]);

                    actualizado.ModificarPedido();

                    dgvPedidos.DataSource = actualizado.BuscarPedidos(ref dtTodos, ref dtEncurso, ref dtFinalizado);

                    LimpiarCampos();
                    tssl1.Text = "Factura emitida correctamente";
                }
                else
                    MessageBox.Show("Debe elegir un pedido aún sin facturar");
            }

        }

        private void btVerFactura_Click(object sender, EventArgs e)
        {
            if (lbIdPedido.Text != " " && tbFacturado.Text == "Si")
            {
                ENPedidos factura = new ENPedidos(int.Parse(lbIdPedido.Text), 0, 0, 0, 0, null, null, 0.0F, 0.0F, DateTime.Parse("01/01/1900"), DateTime.Parse("01/01/1900"), null, null, null, null, null, null, null, null);
                DataTable dtFactu = factura.BuscarFactura();
                frmFactura menufac = new frmFactura(dtFactu);
                menufac.MdiParent = this.MdiParent;
                menufac.Show();
            }
            else
                MessageBox.Show("Debe elegir un pedido ya facturado");
        }

        private void btnCalcular_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                ReCalcular();
                btnCalcular.Enabled = false;
                btnCalcular.Visible = false;
            }
        }

        private void tbxCliente_TextChanged(object sender, EventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void tbxVehiculo_TextChanged(object sender, EventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void tbxChofer_TextChanged(object sender, EventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void clbOpcionesPedido_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void cbTipoDeTransaccion_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void cbFormaDePago_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void dtpFechaRealizacion_ValueChanged(object sender, EventArgs e)
        {
            btnCalcular.Enabled = true;
            btnCalcular.Visible = true;
        }

        private void btnFinalizar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea finalizar el Pedido seleccionado?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                if (ValidarCampos())
                {
                    
                        try
                        {
                            string[] opciones = { "", "", "", "", "", "" };

                            int i = 0;
                            foreach (string opcion in clbOpcionesPedido.CheckedItems)
                            {
                                opciones[i] = opcion;
                                i++;
                            }
                            int chofe;
                            if (tbxChofer.Enabled == false)
                                chofe = 0;
                            else
                                chofe = int.Parse(tbxChofer.Text);

                            ENPedidos actualizado = new ENPedidos(int.Parse(lbIdPedido.Text), int.Parse(tbxVehiculo.Text), int.Parse(tbxCliente.Text), int.Parse(tbxEmpleado.Text), chofe, cbTipoDeTransaccion.Text, cbFormaDePago.Text, float.Parse(tbxPrecio.Text), float.Parse(tbxPrecioFinal.Text), dtpFechaRealizacion.Value.Date, dtpFechaFinalizacion.Value.Date, "Finalizado", tbFacturado.Text, opciones[0], opciones[1], opciones[2], opciones[3], opciones[4], opciones[5]);

                            actualizado.ModificarPedido();



                            dgvPedidos.DataSource = actualizado.BuscarPedidos(ref dtTodos, ref dtEncurso, ref dtFinalizado);
                            tssl1.Text = "Finalizacion Realizada";
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error al finalizar Pedido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                        }
                    
                }
            }
        }

        private void buttonImprimir_Click(object sender, EventArgs e)
        {
            ImprimirTabla();
        }

        private void buttonXML_Click(object sender, EventArgs e)
        {
            ExportarXML();
        }

        private void buttonPDF_Click(object sender, EventArgs e)
        {
            PDF pdf = new PDF();
            pdf.generarPDF("frmPedidos", saveFileDialog1, dgvPedidos);
        }

        public void ExportarXML()
        {
            saveFileDialog1.FileName = "UACARS pedidos.xml";
            saveFileDialog1.Filter = "Archivo XML|*.xml";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string path = saveFileDialog1.FileName;
                int numFilas = 0;

                numFilas = dgvPedidos.Rows.Count;

                DataSet ds = new DataSet("Pedidos");
                DataTable dt = new DataTable("Pedido");

                dt.Columns.Add("id", Type.GetType("System.String"));

                dt.Columns.Add("vehiculo", Type.GetType("System.String"));

                dt.Columns.Add("cliente", Type.GetType("System.String"));

                dt.Columns.Add("empleado", Type.GetType("System.String"));

                dt.Columns.Add("chofer", Type.GetType("System.String"));

                dt.Columns.Add("tipotransaccion", Type.GetType("System.String"));

                dt.Columns.Add("formadepago", Type.GetType("System.String"));

                dt.Columns.Add("precio", Type.GetType("System.String"));

                dt.Columns.Add("preciofinal", Type.GetType("System.String"));

                dt.Columns.Add("fecharealizado", Type.GetType("System.String"));

                dt.Columns.Add("fechafinalizado", Type.GetType("System.String"));

                dt.Columns.Add("estadopedido", Type.GetType("System.String"));

                dt.Columns.Add("facturado", Type.GetType("System.String"));

                dt.Columns.Add("opcion1", Type.GetType("System.String"));

                dt.Columns.Add("opcion2", Type.GetType("System.String"));

                dt.Columns.Add("opcion3", Type.GetType("System.String"));

                dt.Columns.Add("opcion4", Type.GetType("System.String"));

                dt.Columns.Add("opcion5", Type.GetType("System.String"));

                dt.Columns.Add("opcion6", Type.GetType("System.String"));

                if (numFilas > 0)
                {
                    for (int i = 0; i < numFilas; i++)
                    {
                        DataRow dr;
                        dr = dt.NewRow();

                        dr.BeginEdit();

                        dr["id"] = dgvPedidos[0, i].Value.ToString();

                        dr["vehiculo"] = dgvPedidos[1, i].Value.ToString();

                        dr["cliente"] = dgvPedidos[2, i].Value.ToString();

                        dr["empleado"] = dgvPedidos[3, i].Value.ToString();

                        dr["chofer"] = dgvPedidos[4, i].Value.ToString();

                        dr["tipotransaccion"] = dgvPedidos[5, i].Value.ToString();

                        dr["formadepago"] = dgvPedidos[6, i].Value.ToString();

                        dr["precio"] = dgvPedidos[7, i].Value.ToString();

                        dr["preciofinal"] = dgvPedidos[8, i].Value.ToString();

                        dr["fecharealizado"] = dgvPedidos[9, i].Value.ToString();

                        dr["fechafinalizado"] = dgvPedidos[10, i].Value.ToString();

                        dr["estadopedido"] = dgvPedidos[11, i].Value.ToString();

                        dr["facturado"] = dgvPedidos[12, i].Value.ToString();

                        dr["opcion1"] = dgvPedidos[13, i].Value.ToString();

                        dr["opcion2"] = dgvPedidos[14, i].Value.ToString();

                        dr["opcion3"] = dgvPedidos[15, i].Value.ToString();

                        dr["opcion4"] = dgvPedidos[16, i].Value.ToString();

                        dr["opcion5"] = dgvPedidos[17, i].Value.ToString();

                        dr["opcion6"] = dgvPedidos[18, i].Value.ToString();

                        dr.EndEdit();

                        dt.Rows.Add(dr);
                    }
                }
                ds.Tables.Add(dt);
                ds.WriteXml(path);
            }
        }

        public void ImportarXML()
        {
            DataSet dataSet1 = new DataSet();
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = "Archivo XML|*.xml";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string file = openFileDialog1.FileName;

                if (file.Length > 0)
                {
                    try
                    {
                        dataSet1.ReadXml(file);
                        
                        DataGridView aux = new DataGridView();
                        dgvPedidos.DataSource = aux.DataSource;
                        dgvPedidos.DataMember = "";

                        dgvPedidos.DataSource = dataSet1;
                        dgvPedidos.DataMember = "pedido";

                        System.IO.StringWriter swXML = new System.IO.StringWriter();
                        dataSet1.WriteXmlSchema(swXML);
                    }

                    catch (System.Security.SecurityException ex)
                    {
                        MessageBox.Show("Error al acceder al fichero," + ex.Message, "Error de fichero", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    }
                }
            }
        }

        private void btnPeticiones_Click(object sender, EventArgs e)
        {
            frmPeticiones peticion = new frmPeticiones();
            peticion.MdiParent = this.MdiParent;
            peticion.Show();
        }

        public void ImprimirTabla()
        {
            frmImprimir Imprimir = new frmImprimir(dgvPedidos, "PEDIDOS");
            Imprimir.Show();
        }

        private void buttonExcel_Click(object sender, EventArgs e)
        {
            Excel();
        }

        public void Excel()
        {
            XML xml = new XML();
            xml.ExportarExcel(dgvPedidos);
        }
    }
}
